//
//  main.c
//  循环嵌套
//
//  Created by ws on 2017/7/17.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>
/**
 语句嵌套
 if语句嵌套
 */
void test(){
    int age = 18;
    if (age < 18) {
        if (age < 3) {
            printf("幼年");
        }
    }//两个if语句嵌套:语句嵌套
}
/**
 循环嵌套
 */
void test1(){
    //总的执行次数 = 外循环执行的次数 * 内循环执行的次数
    for (int i = 0; i < 2; i++) {
        printf("外循环%d\n",i);
        for (int j = 0; j < 3; j++) {
            printf("内循环%d\n",j);
            printf("美女\n");
        }
    }
}
//练习
void test2(){
    for (int i = 1; i < 5; i++) {
        printf("好友列表%d\n",i);
        for (int j = 1; j < 3; j++) {
            printf("好友%d\n",j);
        }
    }
}
/**
 用户录入整数n 显示如下图形:比如3
 ***
 ***
 ***
 遇到行与列的问题就用循环嵌套,外层循环控制行,内层循环控制列
 */
void test3(){
    //用户录入整数n 显示如下图形:比如3
    //假设用户输入的数字为3
    int n = 0;
    printf("录入整数n\n");
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("*");
        }
        printf("\n");
    }

}/**
  用户录入整数n 显示如下图形:比如3
  ***
  **
  *
  遇到行与列的问题就用循环嵌套,外层循环控制行,内层循环控制列
  总结:尖尖向下:外层循环控制行,内层循环控制列,内层循环的条件表达式随着外层循环的控制变量i的变换而变化(n - i)
  */
void test4(){
    //用户录入整数n 显示如下图形:比如3
    //假设用户输入的数字为3
    int n = 0;
    printf("录入整数n\n");
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - i; j++) {
            printf("*");
        }
        printf("\n");
    }
}

/**
 用户录入整数n 显示如下图形:比如3
 *
 **
 ***
总结:尖尖向上:外层循环控制行,内层循环控制列 内层循环的条件表达式随着外层循环的控制变量的变换而变化
 */
void test5(){
    //用户录入整数n 显示如下图形:比如3
    //假设用户输入的数字为3
    int n = 0;
    printf("录入整数n\n");
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i ; j++) {
            printf("*");
        }
        printf("\n");
    }
}
/**
 用户录入整数n 显示如下图形:比如3
 1
 22
 333
 总结:尖尖向上:外层循环控制行,内层循环控制列 内层循环的条件表达式随着外层循环的控制变量的变换而变化
 */
void test6(){
    //用户录入整数n 显示如下图形:比如3
    //假设用户输入的数字为3
    int n = 0;
    printf("录入整数n\n");
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ",i + 1);
        }
        printf("\n");
    }
}
/**
 用户录入整数n 显示如下图形:比如3
 1
 12
 123
 总结:尖尖向上:外层循环控制行,内层循环控制列 内层循环的条件表达式随着外层循环的控制变量的变换而变化
 */
void test7(){
    //用户录入整数n 显示如下图形:比如3
    //假设用户输入的数字为3
    int n = 0;
    printf("录入整数n\n");
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ",j + 1);
        }
        printf("\n");
    }
}
/**
 for与while
 1.for循环不容易出错
 2.代码更加整洁,可读性更好
 3.当整个循环结束后,还需要使用循环控制变量的时候,就用while
 */
int main(int argc, const char * argv[]) {
    //用户录入整数n 显示如下图形:比如3
    //假设用户输入的数字为3
    int n = 0;
    printf("录入整数n\n");
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ",j + 1);
        }
        printf("\n");
    }

    return 0;
}
